﻿using System;
using System.Globalization;

namespace Mx.Ipn.Escom.TT20080015.Modelo.Datos
{
    /// <summary>
    /// La clase Paciente hereda de la clase Persona.
    /// </summary>
    public class Paciente : Persona
    {
        #region Atributos
        private DateTime fechaNacimiento;
        private bool sexo;
        private string calle;
        private string noExterior;
        private string noInterior;
        private string colonia;
        private string pais;
        #endregion

        public Paciente() : base() { }

        /// <summary>
        /// Constructor de la clase Paciente.
        /// </summary>
        /// <param name="id">Identificador del paciente</param>
        /// <param name="nombre">Nombre del paciente</param>
        /// <param name="aPaterno">Apellido paterno del paciente</param>
        /// <param name="aMaterno">Apellido materno del paciente</param>
        /// <param name="fechaNacimiento">Fecha de nacimiento de paciente</param>
        public Paciente(int id, string nombre, string aPaterno, string aMaterno, string fechaNacimiento)
            : base(id, nombre, aPaterno, aMaterno)
        {
            string[] fecha = fechaNacimiento.Split('/');
            this.fechaNacimiento = new DateTime(Convert.ToInt32(fecha[2]), Convert.ToInt32(fecha[1]), Convert.ToInt32(fecha[0]));
        }

        /// <summary>
        /// Constructor de la clase Paciente.
        /// </summary>
        /// <param name="id">Identificador del paciente</param>
        /// <param name="nombre">Nombre del paciente</param>
        /// <param name="aPaterno">Apellido paterno del paciente</param>
        /// <param name="aMaterno">Apellido materno del paciente</param>
        /// <param name="fechaNacimiento">Fecha de nacimiento de paciente</param>
        /// <param name="sexo">Sexo del paciente</param>
        /// <param name="calle">Calle del domicilio del paciente</param>
        /// <param name="noExterior">Número exterior del domicilio del paciente</param>
        /// <param name="noInterior">Número interior del domicilio del paciente</param>
        /// <param name="colonia">Colonia del domicilio del paciente</param>
        /// <param name="estado">Entidad federativa del paciente</param>
        public Paciente(int id, string nombre, string aPaterno, string aMaterno, string fechaNacimiento, 
            bool sexo,string calle,string noExterior,string noInterior,string colonia, string pais)
            : base(id, nombre, aPaterno, aMaterno)
        {
            string []fecha = fechaNacimiento.Split('/');
            this.fechaNacimiento = new DateTime(Convert.ToInt32(fecha[2]),Convert.ToInt32(fecha[1]),Convert.ToInt32(fecha[0]));
            this.sexo = sexo;
            this.calle = calle;
            this.noExterior = noExterior;
            this.noInterior = noInterior;
            this.colonia = colonia;
            this.pais = pais;
        }

        #region Propiedades
        /// <summary>
        /// Almacena la fecha de naciemiento del paciente.
        /// </summary>
        /// <value>Fecha de nacimiento del paciente.</value>
        public DateTime FechaNacimiento
        {
            get { return fechaNacimiento; }
            set { fechaNacimiento = value; }
        }

        /// <summary>
        /// Almacena el sexo del paciente. 
        /// </summary>
        /// <value>Sexo del paciente.</value>
        public bool Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        /// <summary>
        /// Almacna la calle del domicilio del paciente.
        /// </summary>
        /// <value>Calle del domicilio del paciente.</value>
        public string Calle
        {
            get { return calle; }
            set { calle = value; }
        }

        /// <summary>
        /// Almacena el número exterior del domicilio del paciente.
        /// </summary>
        /// <value>Número exterior del domicilio del paciente.</value>
        public string NoExterior
        {
            get { return noExterior; }
            set { noExterior = value; }
        }

        /// <summary>
        /// Almacena el número interior del domicilio del paciente.
        /// </summary>
        /// <value>Número interior del domicilio del paciente.</value>
        public string NoInterior
        {
            get { return noInterior; }
            set { noInterior = value; }
        }

        /// <summary>
        /// Almacena la colonia del domicilio del paciente.
        /// </summary>
        /// <value>Colonia del domicilio del paciente.</value>
        public string Colonia
        {
            get { return colonia; }
            set { colonia = value; }
        }

        /// <summary>
        /// Alamcena la Entidad Federativa del paciente.
        /// </summary>
        /// <value>Entidad Federativa del paciente.</value>
        public string Pais
        {
            get { return pais; }
            set { pais = value; }
        }
        #endregion

        /// <summary>
        /// Sobreescribe el método toString de la clase Object.
        /// </summary>
        /// <returns>Cadena obtenida del método homónimo de la clase base, adicionandole la fecha de nacimiento,
        /// el sexo, la calle, el número exterior e interior, la colonia y el estado.</returns>
        public override string ToString()
        {
            return "(" + base.ToString() + "," + fechaNacimiento.ToString("yyyyMMdd") + "," +
            sexo + ",'" + calle + "','" + noExterior + "','" +
            noInterior + "','" + colonia + "'," + pais + ")";
        }
    }
}
